package com.h.book.modle;

import com.h.book.enums.ResultCodeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Result<T> {
    private ResultCodeEnum code; // 错误类型，-1 用户为登录，-2 后端出错了，200 后端正常运行，将其设置为 枚举类型
    private String errMsg; // 错误信息的返回
    private T data; // 每一个接口返回的类型，使用泛型进行接收


    public static <T> Result success(T data){
        Result result = new Result();
        result.setCode(ResultCodeEnum.SUCCESS); // 这里是需要定义的返回的信息，这里存在不同的信息，使用枚举类进行存储这个信息，并且进行获取
        result.setErrMsg("");
        result.setData(data);
        return result;
    }

    public static <T> Result unlogin(){
        Result result = new Result();
        result.setCode(ResultCodeEnum.UNLOGIN); // 这里是需要定义的返回的信息，这里存在不同的信息，使用枚举类进行存储这个信息，并且进行获取
        result.setErrMsg("用户未登录");
        return result;
    }

    public static <T> Result fail(String errMsg){
        Result result = new Result();
        result.setCode(ResultCodeEnum.FAIL); // 这里是需要定义的返回的信息，这里存在不同的信息，使用枚举类进行存储这个信息，并且进行获取
        result.setErrMsg(errMsg);
        result.setData(null);
        return result;
    }

    public static <T> Result fail(String errMsg,T data){
        Result result = new Result();
        result.setCode(ResultCodeEnum.FAIL); // 这里是需要定义的返回的信息，这里存在不同的信息，使用枚举类进行存储这个信息，并且进行获取
        result.setErrMsg(errMsg);
        result.setData(data);
        return result;
    }
}
